package com.ts.api.module.api.service;

import com.ts.api.exp.RollBackException;
import com.ts.api.module.api.entity.ApiUserRequest;
import com.ts.api.module.api.entity.bo.ApiParameterBO;
import com.ts.api.module.api.entity.bo.ApiUserRegisterBO;
import com.ts.api.module.product.entity.po.ProductApplyFlowPO;

/**
 *  API传输时注册用户业务
 *
 *  @author Pan
 */
public interface ApiUserRegister {

    /**
     *  进件时-关联用户注册及用户表单数据
     *
     *  @param apiParameterBO       API参数对象
     *  @param productApplyFlowPO   流程记录对象
     */
    ApiUserRegisterBO applyUserRegister(ApiParameterBO apiParameterBO, ProductApplyFlowPO productApplyFlowPO) throws RollBackException;

    /**
     *  根据ApiUserInfo对象-关联用户注册及用户表单数据
     *
     *  @param apiUserRequest       ApiUserInfo对象
     */
    ApiUserRegisterBO applyUserRegisterByApiUser(ApiUserRequest apiUserRequest) throws RollBackException;

    /**
     *  非唯一性-绑定用户与机构的关联数据
     *  进件时-根据撞库流程数据获取原始机构数据
     *      1.插入用户及机构及机构计划绑定数据
     *      2.插入用户与用户流程记录绑定数据
     *
     *  @param  insertProductApplyFlowPO  流程记录对象
     *  @param  userId                    用户id
     *  @throws RollBackException
     */
    void multiBindProductUser(ProductApplyFlowPO insertProductApplyFlowPO, Long userId) throws RollBackException;

    /**
     *  唯一性-绑定用户与机构的关联数据
     *  进件时-根据撞库流程数据获取原始机构数据
     *      1.插入用户及机构及机构计划绑定数据
     *      2.插入用户与用户流程记录绑定数据
     *
     *  @param  insertProductApplyFlowPO  流程记录对象
     *  @param  userId                    用户id
     *  @throws RollBackException
     */
    void uniqueBindProductUser(ProductApplyFlowPO insertProductApplyFlowPO, Long userId) throws RollBackException;

}
